/**
 * Project Name:scb_sms
 * File Name:DateTool.java
 * Package Name:com.scb.dev.sms.util.data
 * Date:Oct 31, 2018 1:51:46 PM
 * Copyright (c) 2018, Wang, Haoyue All Rights Reserved.
 */
package com.scb.dev.mms.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * ClassName: DateTool
 * Description: 日期工具类
 * Date: Oct 31, 2018 1:51:46 PM
 *
 * @author Wang, Haoyue
 * @version V1.0
 * @since JDK 1.8
 */
public class DateTool {
	
	/**
	 * dateToString: 日期转字符串
	 * 
	 * @param date 		日期对象
	 * @param format 	日期转为字符串时使用的格式
	 * @return String 	转换后的日期字符串
	 */
	public static String dateToString(Date date, String format) {
        if (format == null || "".equals(format)) {
            return null;
        } else if (date == null) {
            return null;
        } else {
            return (new SimpleDateFormat(format)).format(date);
        }
	}
	
    /**
     * dateToString: 当前日期转字符串
     * 
     * @param format 	日期转为字符串时使用的格式
     * @return String	转换后的当前日期字符串
     */
    public static String dateToString(String format) {
        return dateToString(new Date(), format);
    }
	
	/**
	 * stringToDate: 字符串转日期
	 * 
	 * @param oldDate 		待转换的日期字符串
	 * @param format 		转换时使用的格式
	 * @return Date 		转换后的日期对象
	 * @throws Exception 	当日期字符串的格式和转换时使用的格式不匹配时抛出异常
	 */
	public static Date stringToDate(String oldDate, String format) throws Exception {
		if (oldDate != null) {
			return new SimpleDateFormat(format).parse(oldDate);
		} else {
			throw new Exception("日期为空，不能转换！");
		}	
	}
	
    /**
     * dayOfWeek: 获取当前日期对应的星期数
     * 
     * @return int  当前日期对应的星期数
     * 				1=星期天,2=星期一,3=星期二,4=星期三,5=星期四,6=星期五,7=星期六
     */
    public static int dayOfWeek() {
        return new GregorianCalendar().get(Calendar.DAY_OF_WEEK);
    }
    
    /**
     * calculate: 对日期（时间）中field参数指定的日期成员进行加减运算
     * 
     * @param date		日期（时间）
     * @param field
     * 					日期成员：
     *                  年：GregorianCalendar.YEAR
     *                  月：GregorianCalendar.MONTH
     *                  日：GregorianCalendar.DATE
     *                  时：GregorianCalendar.HOUR
     *                  分：GregorianCalendar.MINUTE
     *                  秒：GregorianCalendar.SECOND
     *                  毫秒：GregorianCalendar.MILLISECOND
     *                  
     * @param amount	加减计算的幅度，+n或-n
     * @return Date     计算后的日期（时间）
     */
    public static Date calculate(Date date, int field, int amount) {
        if (date == null) {
            return null;
        } else {
            GregorianCalendar gregorianCalendar = new GregorianCalendar();
            gregorianCalendar.setGregorianChange(date);
            gregorianCalendar.add(field, amount);
            return gregorianCalendar.getTime();
        }
    }
    
    /**
     * fetchAllTimeZoneIds: 获取所有的时区编号
     * 排序规则：按照ASCII字符的正序进行排序，排序时候忽略字符大小写
     * 
     * @return String[]		所有的时区编号(时区编号已经按照字符[忽略大小写]排序)
     */
    public static String[] fetchAllTimeZoneIds() {
        Vector<String> vector = new Vector<String>();
        String[] ids = TimeZone.getAvailableIDs();
        for (int i = 0; i < ids.length; i++) {
            vector.add(ids[i]);
        }
        Collections.sort(vector, String.CASE_INSENSITIVE_ORDER);
        vector.copyInto(ids);
        vector = null;
        return ids;
    }
    
    
    /**   
     * @Title: dateToTimeStamp   
     * @Description: 将date 转成 Timestamp
     * @return: Timestamp
     * @author: Yu.You   
     * @createdTime :Nov 20, 2018 10:49:11 AM
     */
    public static Timestamp getTimeStamp() {
    	return new Timestamp(new Date().getTime());
    }


    public static Integer compareDate(String oneDate,String otherDate){
        int result = oneDate.compareTo(oneDate);
        if (result > 0) return 1;
        else if (result < 0) return -1; //oneDate比otherDate早
        else return 0;
    }
    
}
